package algorithms.leecode;

import java.util.ArrayList;
import java.util.List;

public class Au57 {
    public static void main(String[] args) {
        List<Character> list = new ArrayList<>();
        list.add('1');
        list.add('r');
        System.err.println(String.valueOf(list));

//        int[][] intervals = new int[][]{
//                {0, 5},
//                {8,9}
//
//        };
//        int[] newInt = new int[]{
//                2,3
//        };
//        insert(intervals, newInt);
    }

    public static int[][] insert(int[][] intervals, int[] newInterval) {
        // 冒泡排序
        for (int i = 0; i < intervals.length - 1; i++) {
            for (int j = 0; j < intervals.length - 1 - i; j++) {
                if (intervals[j][0] > intervals[j + 1][0]) {
                    exch(intervals, j, j + 1);
                }
            }
        }


        List<int[]> list = new ArrayList<>();
        int[] tmp = new int[2];
        tmp[0] = newInterval[0];
        tmp[1] = newInterval[1];
        boolean add = false;
        boolean cross = false;
        boolean isContain = false;
        for (int i = 0; i < intervals.length; i++) {
            // 前缀无交叉
            if (intervals[i][1] < tmp[0]) {
                list.add(intervals[i]);
            }
            // 前缀交叉
            else if (intervals[i][1] >= tmp[0] && intervals[i][0] <= tmp[0]&& intervals[i][1] < tmp[1]) {
                tmp[0] = intervals[i][0];
                cross = true;
                //            tmp[1] = newInterval[1];
            }
            // 后缀交叉
            else if (intervals[i][1] >= tmp[1] && intervals[i][0] <= tmp[1] && tmp[0] < intervals[i][0]) {
                tmp[1] = intervals[i][1];
                if (!add) {
                    list.add(tmp);
                    add = true;
                }
            }
            // 后缀无交叉
            else if (intervals[i][0] > tmp[1] && !isContain) {
                if (!add) {
                    list.add(tmp);
                    add = true;
                }
                list.add(intervals[i]);
            }
            // 被包含
            else if (intervals[i][1] >= tmp[1] && intervals[i][0] <= tmp[0]) {
                list.add(intervals[i]);

                isContain = true;
            }
            // 包含
            else if (intervals[i][1] <= tmp[1] && intervals[i][0] >= tmp[0]) {
                cross = true;

            }
        }
        // 完全无关系
        if (intervals.length > 0 && tmp[0] > intervals[intervals.length - 1][1]) {
            list.add(tmp);
        }
        if(intervals.length == 0) {
            list.add(tmp);
        }
        if(cross && !add) {
            list.add(tmp);
        }
        int[][] result = new int[list.size()][2];
        for (int i = 0; i < list.size(); i++) {
            result[i] = list.get(i);
        }

        return result;
    }

    public static void exch(int[][] intervals, int x, int y) {
        int[] tmp = intervals[x];
        intervals[x] = intervals[y];
        intervals[y] = tmp;
    }
}
